home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 6 / FM Towns Free Software Collection 6.iso / t_os / helper / source / eup.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-07-08  |  2.3 KB  |  98 lines

  1. #include    <stdio.h>
  2. #include    <stdlib.h>
  3. #include    "graphic.h"
  4. #include    "coldef.h"
  5.  
  6. #define    EUP_X1        (23*8)
  7. #define    EUP_Y1        180
  8. #define    EUP_X2        (57*8-4)
  9. #define    EUP_Y2        260
  10.  
  11. #define    EUP_BAR_SIZE    64
  12. #define    EUP_BAR_X1    (EUP_X1+8)
  13. #define    EUP_BAR_Y1    (EUP_Y1+8)
  14. #define    EUP_BAR_X2    (EUP_X1+11)
  15. #define    EUP_BAR_Y2    (EUP_BAR_Y1+EUP_BAR_SIZE-1)
  16.  
  17. #define    TRK_MAX        32
  18.  
  19. static    BLOCK    *save = NULL;
  20. static    char    *old_ptr = NULL;
  21. static    int    old_tick = 0;
  22. static    int    note_vol[TRK_MAX];
  23.  
  24. void    EUP_open()
  25. {
  26.     int     n;
  27.  
  28.     MOS_disp(OFF);
  29.     save = DSP_push_vram(EUP_X1,EUP_Y1,EUP_X2,EUP_Y2);
  30.     DSP_opbox(EUP_X1,EUP_Y1,EUP_X2,EUP_Y2);
  31.     DSP_wbox(EUP_X1,EUP_Y1,EUP_X2,EUP_Y2,LINE_COL,FILD_COL,M_PSET);
  32.  
  33.     for ( n = 0 ; n < TRK_MAX ; n++ ) {
  34.     note_vol[n] = 0;
  35.     DSP_rbox(EUP_BAR_X1+n*8-1,EUP_BAR_Y1-1,
  36.          EUP_BAR_X2+n*8+1,EUP_BAR_Y2+1,
  37.          LINE_COL,WIND_COL,M_PSET);
  38.     }
  39.     old_tick = tick_timer = 0;
  40.     old_ptr = NULL;
  41. }
  42. void    EUP_close()
  43. {
  44.     DSP_pop_vram(save);
  45.     DSP_clbox(EUP_X1,EUP_Y1,EUP_X2,EUP_Y2);
  46.     MOS_disp(ON);
  47. }
  48. void    EUP_note_on(int trk, int vol)
  49. {
  50.     int     x1,x2;
  51.  
  52.     vol = (vol * EUP_BAR_SIZE) / 128;
  53.  
  54.     x1 = EUP_BAR_X1 + trk * 8;
  55.     x2 = EUP_BAR_X2 + trk * 8;
  56.  
  57.     if ( note_vol[trk] > 0 )
  58.         DSP_box(x1,EUP_BAR_Y1,x2,EUP_BAR_Y2-vol,WIND_COL,M_PSET);
  59.     DSP_box(x1,EUP_BAR_Y2-vol,x2,EUP_BAR_Y2-vol+1,ERR_COL,M_PSET);
  60.     DSP_box(x1,EUP_BAR_Y2-vol+2,x2,EUP_BAR_Y2,PRG_COL,M_PSET);
  61.     note_vol[trk] = vol - 2;
  62. }
  63. void    EUP_chk(char *ptr)
  64. {
  65.     int     n;
  66.  
  67.     if ( old_tick < tick_timer ) {
  68.     for ( n = 0 ; n < TRK_MAX ; n++ ) {
  69.         if ( note_vol[n] > 1 ) {
  70.         DSP_box(EUP_BAR_X1 + n * 8,
  71.             EUP_BAR_Y2-note_vol[n],
  72.             EUP_BAR_X2 + n * 8,
  73.             EUP_BAR_Y2-note_vol[n],
  74.             WIND_COL,M_PSET);
  75.         note_vol[n]--;
  76.         } else if ( note_vol[n] == 1 ) {
  77.             DSP_rbox(EUP_BAR_X1+n*8-1,EUP_BAR_Y1-1,
  78.              EUP_BAR_X2+n*8+1,EUP_BAR_Y2+1,
  79.                  LINE_COL,WIND_COL,M_PSET);
  80.         note_vol[n] = 0;
  81.         }
  82.     }
  83.     old_tick += 16;
  84.     }
  85.  
  86.     if ( old_ptr == NULL )
  87.     old_ptr = ptr;
  88.  
  89.     while ( old_ptr < ptr ) {
  90.     if ( (*old_ptr & 0xF0) == 0x90 )
  91.         EUP_note_on(old_ptr[4] / 4, old_ptr[5] & 127);
  92. /******************
  93.         EUP_note_on(old_ptr[1] % TRK_MAX, old_ptr[5] & 127);
  94. *******************/
  95.     old_ptr += 6;
  96.     }
  97. }
  98.